﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;

namespace Interfaz
{
    public partial class VentanaIVA : UserControl
    {

        #region atributos

        private static VentanaIVA instance;
        private List<IVA> lIVAs;
        private int ultimoIdIVA;
        private bool ingreso;
        private IVA actualIVA;

        #endregion

        #region constructor

        public VentanaIVA()
        {
            InitializeComponent();
            ingreso = true;
            lIVAs = Sistema.getIVAs();
            ultimoIdIVA = Sistema.getUltimoIdIVA();            
        }


        public static VentanaIVA getInstance()
        {
            if (instance == null)
            {
                instance = new VentanaIVA();
            }
            instance.cargarListaIVA();
            instance.limpiarCampos();
            return instance;
        }

        #endregion

        #region eventos

        private void BotonAceptar_Click(object sender, EventArgs e)
        {
            if (validarDatos())
            {
                int porcentaje = int.Parse(TextoPorcentaje.Text);
                if (ingreso)
                {
                    ultimoIdIVA += 1;
                    actualIVA.OID = ultimoIdIVA;
                    actualIVA.Nombre = TextoNombre.Text;
                    actualIVA.Porcentaje = porcentaje;
                    Sistema.agregarIVA(TextoNombre.Text, porcentaje);
                    lIVAs.Add(actualIVA);
                    cargarListaIVA();
                    limpiarCampos();
                }
                else
                {
                    actualIVA.Nombre = TextoNombre.Text;
                    actualIVA.Porcentaje = porcentaje;
                    Sistema.modificarIVA(TextoNombre.Text, porcentaje, actualIVA);
                    cargarListaIVA();
                    limpiarCampos();
                }
            }
        }        

        private void buttonNuevo_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        private void buttonEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (listaIVAs.SelectedItems[0] != null)
                {
                    Sistema.eliminarIVA(actualIVA);
                    lIVAs.Remove(actualIVA);
                    cargarListaIVA();
                    limpiarCampos();
                }
            }
            catch (Exception) { }
        }

        private void listaIVAs_Click(object sender, EventArgs e)
        {
            listaIVAs_SelectedIndexChanged(sender, e);
        }

        private void listaIVAs_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (listaIVAs.SelectedItems[0] != null)
                {
                    ingreso = false;
                    ListViewItem item = (ListViewItem)listaIVAs.Items[listaIVAs.SelectedIndices[0]];
                    actualIVA = (IVA)item.Tag;
                    labelId.Text = actualIVA.OID.ToString();
                    TextoNombre.Text = actualIVA.Nombre;
                    TextoPorcentaje.Text = actualIVA.Porcentaje.ToString();
                }
            }
            catch(Exception){}
        }

        private void TextoPorcentaje_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int num = int.Parse(TextoPorcentaje.Text);
            }
            catch (Exception)
            {
                TextoPorcentaje.Text = "0";
            }
        }

        #endregion

        #region metodos

        private bool validarDatos()
        {
            bool ok = true;
            if (TextoNombre.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. Nombre vacío");
                ok = false;
            }
            try
            {
                int num = int.Parse(TextoPorcentaje.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Error de formato en porcentaje");
                ok = false;
            }            
            return ok;
        }

        private void limpiarCampos()
        {
            ingreso = true;
            labelId.Text = "";
            TextoNombre.Text = "";
            TextoPorcentaje.Text = "0";            
            actualIVA = new IVA();
        }
        private void cargarListaIVA()
        {
            listaIVAs.Items.Clear();
            for (int i = 0; i < lIVAs.Count; i++)
            {
                ListViewItem itemIva = new ListViewItem();
                itemIva.Text = lIVAs[i].OID.ToString();
                itemIva.Tag = lIVAs[i];
                listaIVAs.Items.Add(itemIva);
                listaIVAs.Items[i].SubItems.Add(lIVAs[i].Nombre);
                listaIVAs.Items[i].SubItems.Add(lIVAs[i].Porcentaje.ToString());
            }
        }
        #endregion
        
    }
}
